package clases;

import java.util.HashSet;
import java.util.List;
import java.util.Set;

import tipos.Cadenas;
import tipos.FlujoEntrada;

public class Tablero {

	private Casilla[][] casillas;
	
	public Integer getNumFilas(){
		return casillas.length;
	}
	
	public Integer getNumColumnas(){
		return casillas[0].length;
	}

	public Casilla[][] getCasillas() {
		return casillas;
	}
	
	public Tablero (Integer filas, Integer columnas){
		this.casillas = new Casilla[filas][columnas];
		for (Integer i = 0; i < filas; i++) {
			for (Integer j = 0; j < filas; j++) {
				casillas[i][j] = new Casilla(i, j);
			}
		}
	}
	
	public Tablero (String str) {
		Iterable<String> it = new FlujoEntrada(str);
		for (String st : it) {
			List<String> list = Cadenas.separaElementos(st, ",");
			Integer columnas = Integer.getInteger(list.get(1));
			Integer filas = Integer.getInteger(list.get(0));
			if (list.size() == 2) {
				this.casillas = new Casilla[filas][columnas];
			} else {
				casillas[filas][columnas].setDigito(Integer.getInteger(list.get(2)));
			}
		}
	}

	public Casilla getCasilla(int i, int j) {
		return this.casillas[i][j];
	}
	
	public Set<Casilla> devuelveAdyacentes(Casilla c) {
		Set<Casilla> res = new HashSet<Casilla>();
		Integer colum = c.getColumna();
		Integer fila = c.getFila();
		if (fila+1 < this.getNumFilas()) {
			if (casillas[fila+1][colum].getCamino() == null)
				res.add(this.casillas[fila+1][colum]);
		}
		if (fila-1 > 0) { 
			if (casillas[fila-1][colum].getCamino() == null)
				res.add(this.casillas[fila-1][colum]);
		}
		if (colum+1 < this.getNumColumnas()) {
			if (casillas[fila][colum+1].getCamino() == null)
				res.add(this.casillas[fila][colum+1]);
		}
		if (colum-1 > 0) {
			if (casillas[fila][colum-1].getCamino() == null)
				res.add(this.getCasilla(fila, colum-1));
		}
		return res;
	}
	
}
